<template>
  <h2>当前求和：{{ sum }}</h2>
  <button @click="add">点击+1</button>
  <h2>当前信息：{{ msg }}</h2>
  <button @click="msg += '!'">点击增加感叹号</button>
  <br />
  <h1>姓名：{{ person.name }}</h1>
  <h1>年龄：{{ person.age }}</h1>
  <button @click="person.name += '~'">修改姓名</button>
  <br />
  <button @click="person.age++">增长年龄</button>
  <br />
  <h1>薪资：{{ person.job.j1.salary }}K</h1>
  <br />
  <button @click="person.job.j1.salary++">涨薪</button>
</template>

<script>
// 体现出了组合式API的使用
import { ref, watch,watchEffect } from "vue";
export default {
  name: "myDemo",
  setup() {
    let sum = ref(0);
    let msg = ref("你好啊");
    let person = ref({
      name: "张三",
      age: 18,
      job: {
        j1: {
          salary: 10,
        },
      },
    });

    function add() {
      sum.value++;
    }

    watch(sum, (newValue, oldValue) => {
       console.log('sum被监视了：',newValue,oldValue);
    }, { immediate: true })

    // 不指明监视对象，在回调里用到什么数据就监视什么数据
    // ==>(1)好处是：不用针对不同的监视对象专门写个watch了
    //       坏处是：如果监视的对象和处理的逻辑没有任何关系，则不会触发监听
    // ==>(2)为什么叫Effect?可能就是指 在回调里面哪个受影响了(使用到了)就监视
    // 横向对比：有点类似computed，都会以来某些数据来做出相应的反应
    //          只是computed重视的是结果，watchEffect重视过程 
    watchEffect(() => {
      // eslint-disable-next-line no-unused-vars
      const x1 = sum.value;// 用到了sum数据
      console.log('watchEffect开启了监视');
    })

    return {
      sum,
      add,
      msg,
      person,
    };
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped></style>
